<template>
  <div class="app-container">
    <!-- 导航栏 -->
    <nav class="navbar">
      <div class="navbar-content">
        <div class="navbar-brand">
          <span class="brand-icon">🔬</span>
          <h1 class="brand-title">物理实验数据处理</h1>
        </div>
        <div class="navbar-info">
          <span class="info-badge">Beta</span>
          <span class="info-text">v1.0.0</span>
        </div>
      </div>
    </nav>

    <!-- 主要内容区域 -->
    <div class="main-content">
      <div class="content-wrapper">
        <!-- 左侧实验列表 -->
        <div class="sidebar">
          <div class="sidebar-container">
            <div class="sidebar-header">
              <h2 class="sidebar-title">物理实验列表</h2>
              <p class="sidebar-subtitle">请选择要处理的实验数据</p>
            </div>
            <div class="experiment-list">
              <nav class="category-nav">
                <div class="category-list">
                  <div
                    v-for="category in categories"
                    :key="category.name"
                    class="category-item"
                  >
                    <!-- 分类标题 -->
                    <button
                      @click="toggleCategory(category.name)"
                      class="category-button"
                    >
                      <div class="category-label">
                        <span class="category-icon">{{ category.icon }}</span>
                        <span>{{ category.name }}</span>
                      </div>
                      <svg
                        class="category-arrow"
                        :class="{
                          'is-expanded': expandedCategories.has(category.name),
                        }"
                        xmlns="http://www.w3.org/2000/svg"
                        viewBox="0 0 20 20"
                        fill="currentColor"
                      >
                        <path
                          fill-rule="evenodd"
                          d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z"
                          clip-rule="evenodd"
                        />
                      </svg>
                    </button>
                    <!-- 分类下的实验列表 -->
                    <div
                      v-if="expandedCategories.has(category.name)"
                      class="experiment-sublist"
                    >
                      <button
                        v-for="experiment in getExperimentsByCategory(
                          category.experiments
                        )"
                        :key="experiment.id"
                        @click="selectExperiment(experiment)"
                        :class="[
                          'experiment-button',
                          {
                            'is-selected':
                              selectedExperiment.id === experiment.id,
                          },
                        ]"
                      >
                        <span class="experiment-name">{{
                          experiment.name
                        }}</span>
                      </button>
                    </div>
                  </div>
                </div>
              </nav>
            </div>
          </div>
        </div>

        <!-- 右侧实验处理区域 -->
        <div class="experiment-content">
          <div class="experiment-header">
            <h2 class="experiment-title">{{ selectedExperiment.name }}</h2>
          </div>
          <!-- 根据选择的实验显示对应的组件 -->
          <div v-if="selectedExperiment.id === 2">
            <SpectrometerExperiment />
          </div>
          <div v-else-if="selectedExperiment.id === 5">
            <BridgeExperiment />
          </div>
          <div v-else-if="selectedExperiment.id === 36">
            <TemplateDemo />
          </div>
          <div v-else-if="selectedExperiment.id === 37">
            <ElementDemo />
          </div>
          <div v-else class="placeholder-message">
            该实验的数据处理功能正在开发中...
          </div>
        </div>
      </div>
    </div>
  </div>
</template>

<script setup lang="ts">
import { ref } from "vue";
import SpectrometerExperiment from "./components/SpectrometerExperiment.vue";
import BridgeExperiment from "./components/BridgeExperiment.vue";
import TemplateDemo from "./components/TemplateDemo.vue";
import ElementDemo from "./components/ElementDemo.vue";

// 实验分类
const categories = [
  {
    name: "光学实验",
    experiments: [2, 3, 4, 6, 9, 18, 27, 28, 31],
    icon: "🔭",
  },
  {
    name: "电磁学实验",
    experiments: [1, 5, 11, 13, 24, 29, 30],
    icon: "⚡",
  },
  {
    name: "力学实验",
    experiments: [14, 17, 21, 26, 34],
    icon: "🎯",
  },
  {
    name: "热学实验",
    experiments: [10, 19, 20],
    icon: "🌡️",
  },
  {
    name: "现代物理实验",
    experiments: [7, 15, 22, 25],
    icon: "⚛️",
  },
  {
    name: "综合实验",
    experiments: [8, 12, 16, 23, 32, 33, 35],
    icon: "🔬",
  },
  {
    name: "开发文档",
    experiments: [36, 37],
    icon: "📚",
  },
];

const experiments = [
  { id: 1, name: "电位差计实验" },
  { id: 2, name: "分光计实验" },
  { id: 3, name: "光纤通信实验" },
  { id: 4, name: "测量透明薄片的折射率" },
  { id: 5, name: "自组电桥测电阻实验" },
  { id: 6, name: "光纤传感器实验" },
  { id: 7, name: "弗兰克-赫兹实验" },
  { id: 8, name: "太阳能电池的特性测量实验" },
  { id: 9, name: "光的偏振实验" },
  { id: 10, name: "液体变温粘滞系数的测定" },
  { id: 11, name: "电子束的偏转和电子比荷的测定" },
  { id: 12, name: "测量液体表面张力系数" },
  { id: 13, name: "用模拟法测绘静电场实验" },
  { id: 14, name: "拉伸法测金属丝的杨氏模量" },
  { id: 15, name: "密立根油滴实验" },
  { id: 16, name: "声速的测量" },
  { id: 17, name: "受迫振动实验" },
  { id: 18, name: "迈克尔逊干涉仪" },
  { id: 19, name: "理想气体定律实验" },
  { id: 20, name: "热机实验" },
  { id: 21, name: "测量物体的转动惯量" },
  { id: 22, name: "测定金属电子的逸出功与荷质比" },
  { id: 23, name: "旋转液体物理特性的测量" },
  { id: 24, name: "动态磁滞回线的测量" },
  { id: 25, name: "光电效应实验" },
  { id: 26, name: "运动学实验" },
  { id: 27, name: "自组望远镜和显微镜" },
  { id: 28, name: "等厚干涉实验" },
  { id: 29, name: "磁场的测量" },
  { id: 30, name: "电表的改装和校准" },
  { id: 31, name: "薄透镜焦距的测定" },
  { id: 32, name: "DIY温度报警器" },
  { id: 33, name: "DIY数字称量计" },
  { id: 34, name: "单摆落体与摩擦系数" },
  { id: 35, name: "声测距与定位" },
  { id: 36, name: "组件模板演示" },
  { id: 37, name: "Element Plus 组件演示" },
];

const selectedExperiment = ref(experiments[0]);
const expandedCategories = ref(new Set(categories.map((c) => c.name))); // 默认展开所有分类

const selectExperiment = (experiment: (typeof experiments)[0]) => {
  selectedExperiment.value = experiment;
};

const toggleCategory = (categoryName: string) => {
  if (expandedCategories.value.has(categoryName)) {
    expandedCategories.value.delete(categoryName);
  } else {
    expandedCategories.value.add(categoryName);
  }
};

const getExperimentsByCategory = (categoryExperimentIds: number[]) => {
  return experiments.filter((exp) => categoryExperimentIds.includes(exp.id));
};
</script>

<style>
.app-container {
  min-height: 100vh;
  background-color: #f3f4f6;
}

/* 导航栏样式 */
.navbar {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  z-index: 50;
  background: linear-gradient(135deg, #2563eb, #1d4ed8);
  box-shadow:
    0 1px 3px rgba(0, 0, 0, 0.1),
    0 1px 2px rgba(0, 0, 0, 0.06);
}

.navbar-content {
  max-width: 1280px;
  margin: 0 auto;
  padding: 0.75rem 1.5rem;
  display: flex;
  justify-content: space-between;
  align-items: center;
}

.navbar-brand {
  display: flex;
  align-items: center;
  gap: 0.75rem;
}

.brand-icon {
  font-size: 1.5rem;
  animation: pulse 2s infinite;
}

.brand-title {
  color: white;
  font-size: 1.25rem;
  font-weight: 600;
  letter-spacing: 0.025em;
  margin: 0;
}

.navbar-info {
  display: flex;
  align-items: center;
  gap: 0.75rem;
}

.info-badge {
  background-color: rgba(255, 255, 255, 0.2);
  color: white;
  padding: 0.25rem 0.75rem;
  border-radius: 9999px;
  font-size: 0.75rem;
  font-weight: 500;
  letter-spacing: 0.05em;
  text-transform: uppercase;
}

.info-text {
  color: rgba(255, 255, 255, 0.8);
  font-size: 0.875rem;
  font-weight: 500;
}

@keyframes pulse {
  0%,
  100% {
    transform: scale(1);
  }
  50% {
    transform: scale(1.1);
  }
}

/* 主要内容区域 */
.main-content {
  max-width: 1280px;
  margin: 0 auto;
  padding: 32px 16px;
  padding-top: 80px;
}

.content-wrapper {
  display: flex;
  gap: 24px;
}

/* 侧边栏样式 */
.sidebar {
  width: 288px;
  position: sticky;
  top: 80px;
  height: calc(100vh - 96px);
}

.sidebar-container {
  background-color: white;
  border-radius: 12px;
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
  height: 100%;
  overflow: hidden;
}

.sidebar-header {
  padding: 16px;
  border-bottom: 1px solid #e5e7eb;
  background: linear-gradient(to right, #eff6ff, #eef2ff);
}

.sidebar-title {
  font-size: 18px;
  font-weight: 600;
  color: #111827;
}

.sidebar-subtitle {
  margin-top: 4px;
  font-size: 14px;
  color: #6b7280;
}

.experiment-list {
  overflow-y: auto;
  height: calc(100% - 80px);
}

.category-nav {
  padding: 8px;
}

.category-list {
  display: flex;
  flex-direction: column;
  gap: 4px;
}

.category-item {
  margin-bottom: 8px;
}

.category-button {
  width: 100%;
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 8px 12px;
  font-size: 14px;
  font-weight: 500;
  color: #4b5563;
  border-radius: 8px;
  transition: all 0.2s;
  border: none;
  background: none;
  cursor: pointer;
}

.category-button:hover {
  background-color: #f9fafb;
}

.category-label {
  display: flex;
  align-items: center;
  gap: 8px;
}

.category-icon {
  font-size: 20px;
}

.category-arrow {
  width: 20px;
  height: 20px;
  transform: rotate(0deg);
  transition: transform 0.2s;
}

.category-arrow.is-expanded {
  transform: rotate(180deg);
}

.experiment-sublist {
  margin-top: 4px;
  margin-left: 16px;
  display: flex;
  flex-direction: column;
  gap: 4px;
}

.experiment-button {
  width: 100%;
  display: flex;
  align-items: center;
  padding: 8px 12px;
  font-size: 14px;
  color: #4b5563;
  border-radius: 8px;
  transition: all 0.2s;
  border: none;
  background: none;
  cursor: pointer;
  text-align: left;
}

.experiment-button:hover {
  background-color: #f9fafb;
  color: #111827;
}

.experiment-button.is-selected {
  background-color: #eff6ff;
  color: #2563eb;
  font-weight: 500;
}

.experiment-name {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* 实验内容区域 */
.experiment-content {
  flex: 1;
}

.experiment-header {
  margin-bottom: 32px;
  position: relative;
  padding-bottom: 16px;
  border-bottom: 1px solid #e5e7eb;
}

.experiment-header::before {
  content: "";
  position: absolute;
  bottom: -1px;
  left: 0;
  width: 100px;
  height: 2px;
  background: linear-gradient(to right, #3b82f6, #60a5fa);
}

.experiment-title {
  font-size: 28px;
  font-weight: 700;
  color: #111827;
  display: flex;
  align-items: center;
  gap: 12px;
}

.experiment-title::before {
  content: "📊";
  font-size: 24px;
}

.placeholder-message {
  text-align: center;
  padding: 48px 0;
  color: #6b7280;
}

/* 响应式调整 */
@media (max-width: 1024px) {
  .navbar-content {
    padding: 0 12px;
  }

  .main-content {
    padding: 24px 12px;
    padding-top: 80px;
  }

  .content-wrapper {
    gap: 16px;
  }

  .sidebar {
    width: 240px;
  }

  .experiment-title {
    font-size: 24px;
  }

  .experiment-title::before {
    font-size: 20px;
  }

  .experiment-header::before {
    width: 80px;
  }
}

@media (max-width: 768px) {
  .content-wrapper {
    flex-direction: column;
  }

  .sidebar {
    width: 100%;
    position: static;
    height: auto;
    margin-bottom: 24px;
  }

  .experiment-list {
    max-height: 400px;
  }
}

@media (max-width: 640px) {
  .navbar-content {
    padding: 0.5rem 1rem;
  }

  .brand-title {
    font-size: 1rem;
  }

  .info-badge {
    display: none;
  }

  .main-content {
    padding: 16px 12px;
    padding-top: 72px;
  }

  .experiment-title {
    font-size: 20px;
  }

  .experiment-title::before {
    font-size: 18px;
  }

  .experiment-header::before {
    width: 60px;
  }

  .experiment-header {
    margin-bottom: 24px;
    padding-bottom: 12px;
  }
}
</style>
